home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / mmdf / mmdf-IIb.43 / libndir / seekdir.c < prev    next >
Encoding:
C/C++ Source or Header  |  1986-02-01  |  734 b   |  36 lines

  1. /* Copyright (c) 1982 Regents of the University of California */
  2.  
  3. static char sccsid[] = "@(#)seekdir.c 4.3 2/25/82";
  4.  
  5. #include <sys/types.h>
  6. #include "dir.h"
  7.  
  8. /*
  9.  * seek to an entry in a directory.
  10.  * Only values returned by ``telldir'' should be passed to seekdir.
  11.  */
  12. seekdir(dirp, loc)
  13.     register DIR *dirp;
  14.     long loc;
  15. {
  16.     long curloc, base, offset;
  17.     struct direct *dp;
  18.  
  19.     curloc = telldir(dirp);
  20.     if (loc == curloc)
  21.         return;
  22.     base = loc & ~(DIRBLKSIZ - 1);
  23.     offset = loc & (DIRBLKSIZ - 1);
  24.     if (dirp->dd_loc != 0 && (curloc & ~(DIRBLKSIZ - 1)) == base) {
  25.         dirp->dd_loc = offset;
  26.         return;
  27.     }
  28.     lseek(dirp->dd_fd, base, 0);
  29.     dirp->dd_loc = 0;
  30.     while (dirp->dd_loc < offset) {
  31.         dp = readdir(dirp);
  32.         if (dp == NULL)
  33.             return;
  34.     }
  35. }
  36.